# -*- coding:UTF-8 -*-

"""
这个文件主要用于建立一个常驻服务，用于接收加密后的密钥,以及之后的解密操作
"""
import tornado.ioloop
import tornado.web
import tornado.gen
import main
from Tkinter import *
import tkMessageBox
import multiprocessing
import seccure


class gui_opt():#弹窗的一些操作，需要用户名和加密的数据进行初始化
    def __init__(self,name,data):#初始化
        self.root = Tk()
        self.ecc = main.user_ecc(name)#打开证书文件，获得用户密钥对
        self.name = name
        self.data = data
    def userpass_callback(self):
        print self.input_b.get()
        if(self.input_b.get() == "1234"):#验证密码
            tkMessageBox.showinfo("消息提示",str(self.ecc.ecc_decrypt(self.data)))#将解密后数据弹窗
        else:
            tkMessageBox.showinfo("ERROR",text = "ca密码错误")
    def gui_password(self):#进行弹窗
        self.Label_a = Label(self.root, text="请输入"+str(self.name)+"的ca密码")
        self.input_b = Entry(self.root, show = "*")
        self.button_entry = Button(self.root, text="确定", command=self.userpass_callback)
        self.Label_a.pack()
        self.input_b.pack()
        self.button_entry.pack()
        self.root.mainloop()

def show_gui(name,data):#用于创建新进程的函数
    gui = gui_opt(name,data)
    gui.gui_password()
    exit(0)

class MainHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.engine
    def post(self):
        self.write("seccess")
        print  self.get_argument("name")
        s = self.get_argument("s")
        sig = self.get_argument("sig")
        if(seccure.verify(str(s),sig,str(seccure.passphrase_to_pubkey("i am test key")))):
            p = multiprocessing.Process(target=show_gui,args=(self.get_argument("name")+".key",self.get_argument("data").decode("base64"),))
            p.start()#创建新进程用于显示界面
        print("get")
        self.finish()

application = tornado.web.Application([(r"/",MainHandler),])

if __name__ == '__main__':
    #gui = gui_opt("ca.key",'ACRj+lV5NPeDrKpHosmIQbOnqFok2TVTBS0CIWkJ9cJyl04=\n'.decode("base64"))
    #gui.gui_password()
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()




